Computer Programming Abstract Interfaces এবং Procedure Binding গাইড ও নোট

223

অ্যাবস্ট্রাক্ট ইন্টারফেস এবং প্রোসিডিউর বাঁধন (Abstract Interfaces and Procedure Binding)

ফোরট্রানে অ্যাবস্ট্রাক্ট ইন্টারফেস এবং প্রোসিডিউর বাঁধন দুটি শক্তিশালী কৌশল যা কোডের পুনঃব্যবহারযোগ্যতা, নমনীয়তা, এবং একাধিক ফাংশন বা প্রসিডিউরকে পরিচালনা করতে সাহায্য করে। এই কৌশলগুলির মাধ্যমে, আপনি জেনেরিক ফাংশন তৈরি করতে পারেন এবং কোডকে আরও মডুলার এবং পরিষ্কার করতে পারেন।


১. অ্যাবস্ট্রাক্ট ইন্টারফেস (Abstract Interfaces)

অ্যাবস্ট্রাক্ট ইন্টারফেস এমন একটি ইন্টারফেস যা এক বা একাধিক ফাংশন বা প্রসিডিউরের জন্য একটি সাধারণ ঘোষণা বা প্রটোটাইপ প্রদান করে, তবে এই ইন্টারফেসের ভিতরে নির্দিষ্ট কার্যকারিতা বা বাস্তবায়ন (implementation) অন্তর্ভুক্ত থাকে না।

অ্যাবস্ট্রাক্ট ইন্টারফেস ব্যবহৃত হয় যখন বিভিন্ন ফাংশন বা প্রসিডিউর একই নাম ব্যবহার করতে পারে, তবে তাদের বাস্তবায়ন আলাদা হতে পারে। এটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এর মতো কোডের নমনীয়তা এবং পুনঃব্যবহারযোগ্যতা নিশ্চিত করে।

উদাহরণ:

module abstract_interface
    implicit none
contains
    ! Abstract interface definition
    abstract interface
        function calculate_area(shape) result(area)
            class(*), intent(in) :: shape
            real :: calculate_area
        end function calculate_area
    end interface
end module abstract_interface

এখানে:

  • calculate_area একটি অ্যাবস্ট্রাক্ট ইন্টারফেস ফাংশন যা বিভিন্ন শেপের জন্য এলাকা গণনা করতে পারে, তবে এটি কোন বিশেষ বাস্তবায়ন নেই।
  • বাস্তবায়নগুলির জন্য এই ইন্টারফেসকে ব্যবহার করে আরও বিভিন্ন ফাংশন তৈরি করা সম্ভব।

২. প্রোসিডিউর বাঁধন (Procedure Binding)

প্রোসিডিউর বাঁধন হল সেই প্রক্রিয়া যেখানে একটি ফাংশন বা প্রসিডিউর একটি ইন্টারফেসের মাধ্যমে যুক্ত হয়। এটি মূলত ডাইনামিক ফাংশন কল বা জেনেরিক ফাংশন ব্যবহারের জন্য ব্যবহৃত হয়। প্রোসিডিউর বাঁধন প্রোগ্রামের সময় নির্ধারণ করে কোন ফাংশন বা প্রসিডিউরটি কল করা হবে, যখন একই নামের একাধিক ফাংশন বা প্রসিডিউর থাকে।

ফোরট্রানে, প্রোসিডিউর বাঁধন বা জেনেরিক ফাংশন ব্যবহৃত হয় যখন একই নামের একাধিক ফাংশন বা প্রসিডিউর বিভিন্ন টাইপ বা আর্গুমেন্ট নিয়ে কাজ করে।

উদাহরণ:

module procedure_binding
    implicit none
contains

    ! First procedure to calculate area of a circle
    function area(radius) result(area)
        real, intent(in) :: radius
        real :: area
        area = 3.14159 * radius**2
    end function area

    ! Second procedure to calculate area of a square
    function area(side) result(area)
        real, intent(in) :: side
        real :: area
        area = side**2
    end function area

end module procedure_binding

program test_binding
    use procedure_binding
    real :: circle_area, square_area

    ! Call the first procedure (circle)
    circle_area = area(5.0)
    print *, "Area of Circle: ", circle_area

    ! Call the second procedure (square)
    square_area = area(4.0)
    print *, "Area of Square: ", square_area

end program test_binding

এখানে:

  • area নামক দুটি ভিন্ন ফাংশন আছে, একটি বৃত্তের (circle) এলাকা এবং একটি বর্গের (square) এলাকা বের করার জন্য।
  • ফোরট্রানে প্রোসিডিউর বাঁধন ব্যবহার করে, area ফাংশনটি টাইপের ভিত্তিতে বিভিন্ন প্রকারের হিসাব করবে।

৩. অ্যাবস্ট্রাক্ট ইন্টারফেস এবং প্রোসিডিউর বাঁধনের ব্যবহার

অ্যাবস্ট্রাক্ট ইন্টারফেস এবং প্রোসিডিউর বাঁধন একসাথে ব্যবহার করা হলে, একাধিক কার্যাবলী একই নামের অধীনে আলাদা আলাদা ডেটা টাইপ বা আর্গুমেন্টের জন্য কার্যকরী হতে পারে।

উদাহরণ:

module shape_area
    implicit none
    type, abstract :: shape
    contains
        procedure(calculate_area), deferred :: area
end type shape

type, extends(shape) :: circle
    real :: radius
end type circle

type, extends(shape) :: square
    real :: side
end type square

contains

    ! Calculate area of a circle
    function calculate_area_circle(this) result(area)
        class(circle), intent(in) :: this
        real :: area
        area = 3.14159 * this%radius**2
    end function calculate_area_circle

    ! Calculate area of a square
    function calculate_area_square(this) result(area)
        class(square), intent(in) :: this
        real :: area
        area = this%side**2
    end function calculate_area_square

end module shape_area

program test_abstract
    use shape_area
    type(circle) :: c
    type(square) :: s

    c%radius = 5.0
    s%side = 4.0

    print *, "Area of Circle: ", c%area()
    print *, "Area of Square: ", s%area()
end program test_abstract

এখানে:

  • shape একটি অ্যাবস্ট্রাক্ট টাইপ, এবং এর মধ্যে একটি ডেফার্ড প্রোসিডিউর (area) রয়েছে যা ভবিষ্যতে বৃত্ত এবং বর্গের জন্য বাস্তবায়িত হবে।
  • circle এবং square টাইপ দুটি extends করে shape টাইপকে এবং তাদের নিজস্ব area ফাংশন প্রদান করে।
  • প্রোসিডিউর বাঁধন ফাংশনটি টাইপের উপর ভিত্তি করে আলাদা ফাংশন কল করবে।

৪. ফায়দা এবং ব্যবহার

  1. কোড পুনঃব্যবহারযোগ্যতা: অ্যাবস্ট্রাক্ট ইন্টারফেস এবং প্রোসিডিউর বাঁধন ব্যবহার করে কোড পুনঃব্যবহারযোগ্য হয় এবং একাধিক ধরনের ডেটার জন্য একই নামের ফাংশন বা প্রসিডিউর ব্যবহার করা যায়।
  2. নমনীয়তা: প্রোগ্রামিং আরও নমনীয় হয়, কারণ আপনি একাধিক কার্যাবলী (যেমন বিভিন্ন শেপের জন্য এলাকা গণনা) একটি সাধারণ ইন্টারফেসের মাধ্যমে পরিচালনা করতে পারেন।
  3. অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP): অ্যাবস্ট্রাক্ট ইন্টারফেস অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের মতো কাজ করে, যা উন্নত প্রোগ্রামিং কৌশল এবং কোড মডুলারাইজেশনে সহায়তা করে।

উপসংহার

অ্যাবস্ট্রাক্ট ইন্টারফেস এবং প্রোসিডিউর বাঁধন ফোরট্রানে কোডের নমনীয়তা এবং পুনঃব্যবহারযোগ্যতা বৃদ্ধি করতে সহায়ক। এগুলি জেনেরিক প্রোগ্রামিং কৌশল যা একাধিক ডেটা টাইপের জন্য একক ইন্টারফেস বা নাম ব্যবহারের মাধ্যমে বিভিন্ন কার্যাবলী সম্পাদন করতে সহায়তা করে, যা কোডের দক্ষতা এবং পরিষ্কারতা নিশ্চিত করে।

Content added By
Promotion

Are you sure to start over?

Loading...